{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "9235d0a3",
   "metadata": {},
   "source": [
    "Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n",
    "SPDX-License-Identifier: Apache-2.0\n",
    "\n",
    "# Getting Started with Neptune Analytics"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "91e3f47d",
   "metadata": {},
   "source": [
    "## Table Of Contents\n",
    "\n",
    "* [Introduction](#Introduction)\n",
    "* [Check Connection to the Graph](#Check-Connection-to-the-Graph)\n",
    "* [Getting Help](#Getting-Help)\n",
    "* [Loading Data](#Loading-Data)\n",
    "* [Example openCypher Queries](#Example-openCypher-Queries)  \n",
    "* [Next Steps](#Next-Steps)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "38308e73",
   "metadata": {},
   "source": [
    "## Introduction"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "de84a6ec",
   "metadata": {},
   "source": [
    "Data scientists and developers looking to explore and interact with graph data to derive insights will find the features of Neptune Analytics a solid fit for these types of projects.  Neptune Analytics is optimized to load large amounts of data, run graph algorithms, issue analytic queries, and perform vector search.\n",
    "\n",
    "\n",
    "When combined with Neptune Notebooks, Neptune Analytics empowers users to interact with data using familiar tools, such as Pandas, Jupyter, and Python, to discover and pinpoint interactions and patterns of behavior in the data that are indicative of fraud, illegal activities, optimization opportunities etc.\n",
    "\n",
    "\n",
    "As an introductory guide, this notebook will guide you through some of the most common steps you will perform when working on these projects.  \n",
    "\n",
    "1. Loading data to a Neptune Analytics graph\n",
    "2. Running openCypher queries and algorithms\n",
    "3. Visualizing the results"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "73a81eb5",
   "metadata": {},
   "source": [
    "## Check Connection to the Graph"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1cacf86d",
   "metadata": {},
   "source": [
    "Let's start by first validating the connection by checking the status API endpoint of your graph."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1c5cb643",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "%opencypher_status"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8f3b5040-15be-474e-9b55-01b60945085d",
   "metadata": {},
   "source": [
    "Examining the response we should see that the graph returns an object that contains some information on currently running openCypher queries.\n",
    "\n",
    "## Getting Help\n",
    "You can get help at any time using the `--help` option.\n",
    "\n",
    "```\n",
    "%opencypher_status --help\n",
    "```\n",
    "\n",
    "**Note:**  If you are using a cell magic the cell body needs at least one character in it for `--help` to work.\n",
    "\n",
    "```\n",
    "%%oc --help\n",
    "x\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "072537bf",
   "metadata": {},
   "source": [
    "## Loading Data"
   ]
  },
  {
   "attachments": {
    "ec106257-48c2-4974-a24f-01b872cd5902.png": {
     "image/png": "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9WenfomACIiACJSGQKjFm4559zlCriICIiACIiACIuBc6MXbu8+Z+y0B109WBERABERABJwLVZKWgm6IF22fOtV/L6i+tudPgHzf69evdxs3bsy/wv/f6uv99ttvrnLlyoXW1U4REAEREIHME4iEeIPFC7YEvPg/ks2bN7sNGza4OXPmuPnz57vEXOD5ne377793X3/9tVu0aJGrU6eO23bbbfOrpm0iIAIiIAJZIlAxEMWbsnTtYl8WFzrFC7j/bhv1T4EE1qxZ495++217APrwww/d2rVrXSwWK7A+Qj99+nS3YMECt9tuu7mGDRsWWFc7REAEREAEMk8gUuINHi/YEvCifyyI8Oeff+4ef/xxN2jQIDdr1iy3bt26QoWbsyLsHLtixQqz1pcuXepq1qzpdtppJ1exYsWiL6waIiACIiACZUogcuINDQSc17PPPuvOOussA8R3lT8JfPvtt+7dd991L7/8snvnnXfc7Nmzixzr/vPo/wn4L7/84pYvX+6WLFnisN4rVarkdt55Z7fDDjskVtVnERABERCBDBOIpHjDqF69eu7MM880XLLCDYNZzASbMbaNYGNtjx492q1cufJ/FUrw76ZNm9yqVavMav/555/N8ka8WTO7QoUKJTijDhEBERABESgtgciKt++4t7gR8PIs4n/88Ye5xHGNDxgwwD322GNu5syZ7vfff/eoSvVO5Dnn4/xcq1GjRm7rrbc2MZeIlwqtDhYBERCBYhOoEIxvFhy5VOzTZfcAYu+8gJPche/pKORX55Wu86WjTcnnwL09YsQI98QTT7gZM2Y4LHCizNNdcJ0TxNaiRQt3ww03uAMOOMCs8HRfR+cTAREQAREomEBOibfvJiKbbhEnxzoCns6HAt/e0rzz7EUE+ZAhQ9zYsWPdN998Y3O5S3POoo4laG377bd3++yzj+vRo4c76qijXKtWreRGLwqc9ouACIhAmgjkpHh7NokizjaEFze7d7X7eqm8I9wIOGO9zJPOtojjDsfapl2Mb3/88ccWWFYW1nZBfBDxZs2auUMPPdQdeeSRxgdR32qrrQo6RNtFQAREQATSQCCnxdvzQeB4eWuc7YgvBSHnlUrx1jd1CZhbuHBhVkT8p59+Mgsbi5uIewLUiAzPVqlatapr166d69evn2vbtq2rVauWWebZao+uKwIiIAK5TqBciHfy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nfXGEfNcsbSTOUi8k4nouwiIgAiIQJkRQMiZB46YY5UzlQxr3FvUiDjudf+iIVjl/oVo8yKDG1b2PvvsY1O/EOvGjRubYJdZ40N0Yol3iG6GmiICIiACuU4AS5xIccapCT7jnfHrlStXWoQ474xpY437vOVY2LwYE69WrZolXuGdcW0izBkf5x03e65a2sm/C4l3MhF9FwEREAERyCgBP6aNWDO2jaCzDaGnIMhY2wg0074Qct7ZVl6LxLu83nn1WwREQAREILIEip4RH9muqeEiIAIiIAIikJsEJN65eV/VKxEQAREQgRwmIPHO4ZurromACIiACOQmAYl3bt5X9UoEREAERCCHCUi8c/jmqmsiIAIiIAK5SUDinZv3Vb0SAREQARHIYQIS7xy+ueqaCIiACIhAbhKQeOfmfVWvREAEREAEcpiAxDuHb666JgIiIAIikJsEJN65eV/VKxEQAREQgRwmIPHO4ZurromACIiACOQmAYl3bt5X9UoEREAERCCHCUi8c/jmqmsiIAIiIAK5SUDinZv3Vb0SAREQARHIYQIS7xy+ueqaCIiACIhAbhKQeOfmfVWvREAEREAEcpiAxDuHb666JgIiIAIikJsEJN65eV/VKxEQAREQgRwmIPHO4ZurromACIiACOQmAYl3bt5X9UoEREAERCCHCUi8c/jmqmsiIAIiEGUCl156qRs6dGiUu1BmbZd4lxlanVgEREAERCA/Aj169Mhv8xbbdthhB7f11ltvsT0bG1Jtc6baVilTF9J1REAEREAERAACP/74Y0og7rzzzpTqZaJSqm3ORFu4hizvTJHWdURABEQgpAQ2bNjg/v73v7sWLVq4vfbay3Xt2tXdcMMNbtasWfEWr1mzxl1wwQWuSZMm9uIz23x54okn3GGHHeaGDBni2rZta+fp3bt3njqDBw+2Oh9//LG9U5/Xc889509j74MGDYrvHzlyZJ59fEnlWtRbsGCBow3Vq1e39lx22WVu7dq17LKSynlSbbM/Z8beYyoiIAIiIALlmsCZZ54Zu/vuu2N//PFH7Pfff4+NHz8+FohQbOzYscaFbQcddFAsENXY5s2b7cVntrGPwvuxxx4ba9CgQey7776Lbdq0Kda/f//YVVddZft9nZ9//jnWrl27GO/+5c/hK/KdfU8//XRs4MCBfnP8PZVrrV69Ola7du3Yq6++Glu/fn1s5cqVsVtvvTXWvXv3Yp3Ht6WoNsdPmqEPsrwz9pikC4mACIhA+AgsWrTIjR492l1zzTVuq622cpUqVXIHH3ywWcM1atSwBo8aNcq1b9/enX766a5ChQr24vMBBxzg2EfhuMqVK7t33nnH1axZ01WsWNFdeOGFbsKECbbf19lpp53cNtts43j3L45NLHxn33bbbZe4Of45lWthvdPGPn36uO23397tscce5l1Yt26d+/LLL+1cqZzHt6WoNscbl6EPeYll6KK6jAiIgAiIQDgIzJ071wQOUU4sffv2jX/Ffd6pU6f4d/+hY8eObvbs2e7oo4/2m1yVKlXinwsS33iFUn4o7Fpz5sxxb7zxhnvrrbfyXAXxXrFiRZ5thZ0nT8UQfZF4h+hmqCkiIAIikGkCVatWdRMnTiz0srVq1XJY6MllyZIlbs8990zeHIrvDRs2NMv/5ptvDkV70t0Iuc3TTVTnEwEREIEIESBI7fvvv8/j3g7Gtd2TTz7p7r//fusJAWwDBgywADDfNYLBHn30UdetWze/KeX3jRs3ul9++SVen0ju5cuXx7+n48PJJ59s7cMzkFg++OADN2PGjMRNKX3ORJtTaoivlKGxdV1GBERABEQgpAQCMYu1adMmFgheLBinjvXq1St2/fXXx3744Yd4i4Ox69i+++4b69evn734/Nlnn8X3Uz8Yp7ZgtKVLl9r2YMzZAt9uu+22eD0+PP/887EOHTrELrnkEgtya968eSwQVavDsYcccogFwxH8xovAOLYFDwxWJ9Vrffrpp3Y8wWb0i/eePXvGAo9Bsc5D5cLabCfL8D8VuJ4Xcr2LgAiIgAiUTwJY24sXL3ZBxLnbe++984XAPixuSv369S0oLd+KKWzEksUqxiWP676siu9XEHHucKUTVFfSkqk2p9I+iXcqlFRHBERABERABEJEQGPeIboZaooIiIAIiIAIpEJA4p0KJdURAREQAREQgRARkHiH6GaoKSIgAiIgAiKQCgGJdyqUVEcEREAEREAEQkRA4h2im6GmiIAIiIAIiEAqBCTeqVBSHREQAREQAREIEQGJd4huhpoiAiIgAiIgAqkQkHinQkl1REAEREAERCBEBCTeIboZaooIiIAIiIAIpEJA4p0KJdURAREQAREQgRARkHiH6GaoKSIgAiIgAiKQCgGJdyqUVEcEREAEREAEQkRA4h2im6GmiIAIiIAIiEAqBCTeqVBSHREQAREQAREIEQGJd4huhpoiAiIgAiIgAqkQkHinQkl1REAEREAERCBEBCTeIboZaooIiIAIiIAIpEJA4p0KJdURAREQAREQgRARkHiH6GaoKSIgAiIgAiKQCgGJdyqUVEcEREAEREAEQkRA4h2im6GmiIAIiIAIiEAqBP4frf2WpFJmRHoAAAAASUVORK5CYII="
    }
   },
   "cell_type": "markdown",
   "id": "62f5cb8a",
   "metadata": {},
   "source": [
    "The first step in most projects is to load data to use for analysis.  For demostration purposes, we have provided a set of datasets that can be used to demonstrate the features and functionality of Neptune Analytics. \n",
    "\n",
    "The cell below makes it easy to load the `air-routes` data into your graph.  The `air-routes` dataset we will be loading in this notebook is supplied as part of the [Practical Gremlin](https://kelvinlawrence.net/book/Gremlin-Graph-Guide.html#air) book.\n",
    "\n",
    "The `air-route`s graph contains several vertex types that are specified using labels. The most common ones being `airport` and `country`. There are also nodes for each of the seven continents (`continent`) and a single `version` vertex that I provided as a way to test which version of the graph you are using.\n",
    "\n",
    "Routes between airports are modeled as edges. These edges carry the `route` label and include the distance between the two connected airport vertices as a property called `dist`. Connections between countries and airports are modelled using an edge with a `contains` label.\n",
    "\n",
    "Each `airport` vertex has many properties associated with it giving various details about that airport including its IATA and ICAO codes, its description, the city it is in and its geographic location. A full data model of the `air-route`s graph is below.\n",
    "\n",
    "![image.png](attachment:ec106257-48c2-4974-a24f-01b872cd5902.png)\n",
    "\n",
    "To load this dataset, run the two cells below.  This first cell will setup a few python variables using the configuration parameters of this Neptune Notebook.  The second cell will use Neptune Analytics bulk load feature to load the data from the provided S3 bucket.  \n",
    "\n",
    "**Note:** You only need to do this once. If you have already loaded the data previously you do not need to load it again."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "803e503b",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "import graph_notebook as gn\n",
    "config = gn.configuration.get_config.get_config()\n",
    "\n",
    "s3_bucket = f\"s3://aws-neptune-customer-samples-{config.aws_region}/sample-datasets/gremlin/air-routes/\"\n",
    "region = config.aws_region"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2e3ba562",
   "metadata": {},
   "source": [
    "Run the following cell to load the data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "faed0178",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "%%oc \n",
    "\n",
    "CALL neptune.load({format: \"csv\", \n",
    "                   source: \"${s3_bucket}\", \n",
    "                   region : \"${region}\"})"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "09beced5",
   "metadata": {},
   "source": [
    "Alternatively, you can perform a data load via the %load magic, for example:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "42706e9b",
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    },
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "%load  --source s3://aws-neptune-customer-samples-us-east-1/sample-datasets/gremlin/air-routes/ --format csv --region us-east-1 --run"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ef1fac39-28c5-440c-a88d-9482d5594b20",
   "metadata": {},
   "source": [
    "Running the cell below will show some summary statistics about the data in the graph after it is loaded."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "95e13b05-4dfb-4ac3-bbd6-4b70349b163f",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "%summary"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8fb7149d",
   "metadata": {},
   "source": [
    "## Example openCypher Queries"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c1d2a3d9",
   "metadata": {},
   "source": [
    "The notebook cells that follow contain various queries that showcase both features of the openCypher query language and features of Neptune Notebooks. Note that either %%oc or %%opencypher may be used to denote that a cell contains an openCypher query.\n",
    "\n",
    "This notebook does not go into detail on how the openCypher query language works.  If you would like to learn the details of the openCypher query language please look at the [openCypher Language Tutorial](../../04-Language-Tutorials/02-openCypher/01-Basic-Read-Queries.ipynb)."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "64893e32",
   "metadata": {},
   "source": [
    "### Show me 50 airports"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c17f5927",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "%%oc\n",
    "MATCH (a:airport)\n",
    "RETURN a.code as Code, a.desc AS Desc, rand() AS r\n",
    "ORDER BY r\n",
    "LIMIT 50"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "60431e89",
   "metadata": {},
   "source": [
    "### Find the Seattle Airport"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "28ef58be",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "%%oc -d code\n",
    "MATCH (a:airport {code: 'SEA'})\n",
    "RETURN a"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "acac7815",
   "metadata": {},
   "source": [
    "### Find the places you can fly to from the Seattle Airport"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b7dc608c",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "%%oc -d code\n",
    "MATCH p=(:airport {code: 'SEA'})-[]->()\n",
    "RETURN p"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3089b63b-41de-4181-b1a7-735885816fbe",
   "metadata": {},
   "source": [
    "## Seeing a visual representation of your query\n",
    "\n",
    "The results of any openCypher query that returns a path (`MATCH p= ... RETURN p`) or simple list of nodes can be displayed visually. When such queries are run, you will see a `Graph` tab in the query results area alongside the `Console` tab. Specific visualization features will be explained  using examples throughout this notebook. \n",
    "\n",
    "\n",
    "### Query visualization hints and settings\n",
    "\n",
    "Settings can be used to give the visual renderer hints as to how to label the nodes drawn.\n",
    "\n",
    "You can specify query visualization hints using  `-d`, `-de`, `-l` and `-g` after the `%%oc` or `opencypher` cell \"magics\". Either one of them can be used to run an openCypher query. The syntax in general is:\n",
    "\n",
    "`%%opencypher -d $my_vertex_mapping -de $my_edge_mapping -l <max label length> -g <property to group by>`\n",
    "\n",
    "All of these settings are optional. By default nodes in the visualization display their label's text. \n",
    "\n",
    "#### Customize a label's text with -d\n",
    "The parameter `$my_mapping` refers to a Python variable that you create in a different cell that provides a mapping from a node's label to the name of a property you prefer be used to label nodes in the visualization. For example\n",
    "\n",
    "`my_vertex_mapping = '{\"airport\":\"city\",\"country\":\"code\"}`\n",
    "\n",
    "In cases where each node will be labelled usding a single property name the -d option does not require a map. The property name is all that is needed. The same is true for edges and the -de option.\n",
    "\n",
    "`%%opencypher -d city -de dist`\n",
    "\n",
    "#### Customize a label's text length with -l\n",
    "By default labels shown in the visualization are truncated at 10 characters and the last 3 of the ten are replaced by an ellipsis. You can override this setting using the `-l` setting. For example:\n",
    "\n",
    "`%%opencypher -l 20`\n",
    "\n",
    "#### Customize a nodes' group with -g to change its color\n",
    "\n",
    "Nodes in the visualization are colored (grouped) using their labels by default. You can change this using the `-g` option. For example, to group nodes by the `country` property:\n",
    "\n",
    "`%%opencypher -g country`\n",
    "\n",
    "Let's take a look at what our visualization looks like if we set the `city` property as the label for our edges and the `dist` property as the label for the edges.  Let us also color the nodes using the `country` property and set the length of the labels to 20 characters."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "9333e028-3ed5-4538-a2b9-2ee0eca120d4",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "my_edge_labels = '{\"route\":\"dist\"}'\n",
    "my_node_labels = '{\"airport\":\"city\"}'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ec56759c-719e-4511-85d4-ccd4bd15dfbe",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "%%oc -d $my_node_labels -de $my_edge_labels -l 20 -g country\n",
    "MATCH p=(:airport {code: 'SEA'})-[:route]->()\n",
    "RETURN p"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "da4434ec",
   "metadata": {},
   "source": [
    "## Next Steps\n",
    "\n",
    "In this notebook, we have demonstrated how to load data and query that data using Neptune Analytics.  These features are the basic building blocks for Neptune Analytics so we encourage you to experiment with the sample data to further explore all of the features. \n",
    "\n",
    "Next, you can follow the links below for more detailed examples of the more advanced features of Neptune Analytics such as:\n",
    "\n",
    "* [Graph Algorithms](../02-Graph-Algorithms/01-Getting-Started-With-Graph-Algorithms.ipynb) - Graph algorithms provide a mechanism to solve graph problems dealing with path finding, importance/centrality, clustering, and similarity.\n",
    "* Vector Similarity Search - Vector Similarity Search (VSS) provides a way to combine dense representations of data, stored in embeddings, with sparse stuctured graph representations within openCypher queries to provide a holisitc view into complex data.\n",
    "\n",
    "Once you have examined some of the features of Neptune Analytics you can then progress to some of the common application patterns and use case examples, which are linked below:\n",
    "\n",
    "* [Sample Use Cases](../03-Sample-Use-Cases/Overview.ipynb)\n",
    "* [Sample Use Cases](../04-Sample-Use-Cases/Overview.ipynb)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fb290271",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
